package entidadesBD;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.*;

import entidadesVO.*;

@Entity
@Table(name="centro_distribucion")
public class CentroDistribucion implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private float latitud;
	private float longitud;
	private String nombreCentroDistribucion;
	private Set<Articulo> articulo = new HashSet<Articulo>();
	
	private int codigoCentroDistribucion;
	
	public CentroDistribucion(float latitud, float longitud, String nombreCentroDistribucion, Set<Articulo> articulo) {
		this.latitud = latitud;
		this.longitud = longitud;
		this.nombreCentroDistribucion = nombreCentroDistribucion;
		this.articulo = articulo;
	}
	/*
	 * Constructor sin Articulo
	 */
	public CentroDistribucion(float latitud, float longitud, String nombreCentroDistribucion) {
		this.latitud = latitud;
		this.longitud = longitud;
		this.nombreCentroDistribucion = nombreCentroDistribucion;
	}
	/*
	 * Constructor Vacio
	 */
	public CentroDistribucion(){
		
	}
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public int getCodigoCentroDistribucion(){
		return codigoCentroDistribucion;
	}
	public void setCodigoCentroDistribucion(int codigoCentroDistribucion){
		this.codigoCentroDistribucion = codigoCentroDistribucion;
	}
	
	@ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
	@JoinTable(name = "articulos_centro_distribucion",
			           joinColumns = {
		                              @JoinColumn(name = "codigoCentroDistribucion")
		                              },
	                   inverseJoinColumns = {
		                              @JoinColumn(name = "codigoArticulo")
	                                        }
		       )
	public Set<Articulo> getArticulo() {
		return articulo;
	}
	public void setArticulo(Set<Articulo> articulo) {
		this.articulo = articulo;
	}
	public void addArticulo(Articulo articulo){
		this.articulo.add(articulo);
	}
		       
	@Column
	public float getLatitud() {
		return latitud;
	}
	public void setLatitud(float latitud) {
		this.latitud = latitud;
	}
	
	@Column
	public float getLongitud() {
		return longitud;
	}
	public void setLongitud(float longitud) {
		this.longitud = longitud;
	}
	
	@Column
	public String getNombreCentroDistribucion() {
		return nombreCentroDistribucion;
	}
	public void setNombreCentroDistribucion(String nombreCentroDistribucion) {
		this.nombreCentroDistribucion = nombreCentroDistribucion;
	}
	
	@Transient
	public CentroDistribucionVO getCentroDistribucionVO(){
		CentroDistribucionVO centroDistribucionVO = new CentroDistribucionVO(latitud,longitud,nombreCentroDistribucion,codigoCentroDistribucion);
		return centroDistribucionVO;
	}
	
	/*
	 * En base a un centro de distribucion VO sin codigo genera un articulo 
	 */
	public void setCentroDistribucion(CentroDistribucionVO centroDistribucionVO){
		this.latitud = centroDistribucionVO.getLatitud();
		this.longitud = centroDistribucionVO.getLongitud();
		this.nombreCentroDistribucion = centroDistribucionVO.getNombreCentroDistribucion();
	}
}
